﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;
using KProject.Model;
using KProject.Controller;

namespace KProject.View
{
    public partial class FormPrincipal : Form
    {
        private ConcursoController cc = new ConcursoController();
        private JuradosController jc = new JuradosController();
        private GruposJuradosController gc = new GruposJuradosController();
        private CategoriasController cat = new CategoriasController();

        public FormPrincipal()
        {
            InitializeComponent();
            MessageBoxManager.Yes = "Sim";
            MessageBoxManager.No = "Não";
            MessageBoxManager.Register();
        }

        #region Menu

        private void menuNovo_Click(object sender, EventArgs e)
        {
            try
            {
                cc.Novo(this, tabControl, menuEditar, menuFechar);
                jc.Atualizar(gridJurados, cc.Concurso.Id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void menuAbrir_Click(object sender, EventArgs e)
        {
            try
            {
                cc.Abrir(this, tabControl, menuEditar, menuFechar);
                jc.Atualizar(gridJurados, cc.Concurso.Id);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void menuEditar_Click(object sender, EventArgs e)
        {
            cc.Editar(this);
        }

        private void menuFechar_Click(object sender, EventArgs e)
        {
            cc.Fechar(this, tabControl, menuEditar, menuFechar);
        }

        private void menuSair_Click(object sender, EventArgs e)
        {
            cc.Sair(this, tabControl, menuEditar, menuFechar);
        }

        #endregion

        #region Abas

        private void tabControl_Selected(object sender, TabControlEventArgs e)
        {
            string title = e.TabPage.Text;

            try
            {
                if (title.Equals("Jurados"))
                {
                    try
                    {
                        jc.Atualizar(gridJurados, cc.Concurso.Id);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (title.Equals("Grupos de Jurados"))
                {
                    try
                    {
                        gc.Atualizar(gridGrupos, lbJuradosInseridos, lbJuradosNaoInseridos,
                                     bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo,
                                     bGrupoRemoverSelecionado, bUpJurado, bDownJurado, cc.Concurso.Id,
                                     tabControl);
                    }
                    catch (VerifyingException ex)
                    {
                        MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (title.Equals("Categorias"))
                {
                    try
                    {
                        cat.Atualizar(gridCategorias, cc.Concurso.Id, tabControl);
                    }
                    catch (VerifyingException ex)
                    {
                        MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (title.Equals("Entidades"))
                {

                }
                else if (title.Equals("Candidatos"))
                {

                }
                else if (title.Equals("Documentos"))
                {

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region Jurados

        private void bAdicionarJurado_Click(object sender, EventArgs e)
        {
            jc.Adicionar(gridJurados);
        }

        private void bRemoverJurado_Click(object sender, EventArgs e)
        {
            try
            {
                jc.Remover(gridJurados);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void gridJurados_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                jc.Verificar(gridJurados, e.ColumnIndex, e.RowIndex, cc.Concurso.Id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region Grupos de Jurados

        private void bGrupoInserirTudo_Click(object sender, EventArgs e)
        {
            gc.AdicionarTodosJurados(lbJuradosInseridos, lbJuradosNaoInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bUpJurado, bDownJurado, true);
            gc.VerificarUpDown(lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bGrupoInserirSelecionado_Click(object sender, EventArgs e)
        {
            gc.AdicionarJuradosSelecionados(lbJuradosInseridos, lbJuradosNaoInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bUpJurado, bDownJurado, true);
            gc.VerificarUpDown(lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bGrupoRemoverSelecionado_Click(object sender, EventArgs e)
        {
            gc.AdicionarJuradosSelecionados(lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bGrupoInserirTudo, bGrupoInserirSelecionado, bUpJurado, bDownJurado, false);
            gc.VerificarUpDown(lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bGrupoRemoverTudo_Click(object sender, EventArgs e)
        {
            gc.AdicionarTodosJurados(lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bGrupoInserirTudo, bGrupoInserirSelecionado, bUpJurado, bDownJurado, false);
            gc.VerificarUpDown(lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bGrupoInserir_Click(object sender, EventArgs e)
        {
            try
            {
                gc.Inserir(tbNomeGrupo, lbJuradosNaoInseridos, lbJuradosInseridos,
                           bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo,
                           bGrupoRemoverSelecionado, bGrupoInserir, bGrupoLimpar, bGrupoSalvar,
                           bGrupoRemover, bGrupoCancelar, gridGrupos, bUpJurado, bDownJurado, cc.Concurso.Id);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bGrupoLimpar_Click(object sender, EventArgs e)
        {
            gc.Limpar(tbNomeGrupo, lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bUpJurado, bDownJurado);
        }

        private void gridGrupos_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            gc.CarregarDados(gridGrupos, tbNomeGrupo, bGrupoInserir, bGrupoLimpar, bGrupoSalvar, bGrupoRemover, bGrupoCancelar, lbJuradosNaoInseridos, lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bGrupoCancelar_Click(object sender, EventArgs e)
        {
            gc.Cancelar(tbNomeGrupo, lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bGrupoInserir, bGrupoLimpar, bGrupoSalvar, bGrupoRemover, bGrupoCancelar, bUpJurado, bDownJurado);
        }

        private void bGrupoSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                gc.Salvar(tbNomeGrupo, lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bGrupoInserir, bGrupoLimpar, bGrupoSalvar, bGrupoRemover, bGrupoCancelar, gridGrupos, bUpJurado, bDownJurado);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bGrupoRemover_Click(object sender, EventArgs e)
        {
            try
            {
                gc.Remover(gridGrupos, tbNomeGrupo, lbJuradosNaoInseridos, lbJuradosInseridos, bGrupoInserirTudo, bGrupoInserirSelecionado, bGrupoRemoverTudo, bGrupoRemoverSelecionado, bGrupoInserir, bGrupoLimpar, bGrupoSalvar, bGrupoRemover, bGrupoCancelar, bUpJurado, bDownJurado);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void lbJuradosInseridos_SelectedIndexChanged(object sender, EventArgs e)
        {
            gc.VerificarUpDown(lbJuradosInseridos, bUpJurado, bDownJurado);
        }

        private void bUpJurado_Click(object sender, EventArgs e)
        {
            gc.JuradoMove(lbJuradosInseridos, bUpJurado, bDownJurado, -1);
        }

        private void bDownJurado_Click(object sender, EventArgs e)
        {
            gc.JuradoMove(lbJuradosInseridos, bUpJurado, bDownJurado, 1);
        }

        #endregion

        #region Categorias

        private void bAdicionarCategoria_Click(object sender, EventArgs e)
        {
            cat.Adicionar(gridCategorias, grupoJuradosCategoria);
        }

        #endregion

        private void gridCategorias_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                cat.CurrentColumnIndex = e.ColumnIndex;
                cat.CurrentRowIndex = e.RowIndex;
                cat.Verificar(gridCategorias, grupoJuradosCategoria, cc.Concurso.Id);
            }
            catch (VerifyingException ex)
            {
                MessageBox.Show(ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        


    }
}
